package com.find.memories.photoviewer;

import android.graphics.Point;
import android.graphics.RectF;
import android.view.MotionEvent;
import android.widget.ImageView;

/**
 * PhotoViewer의 여러 Body를 Control하기 위한 Interface
 * @author Jang
 */
public interface PhotoViewerBodyInterface {

	/**
	 * Body에 들어있는 main ImageView를 가져온다. 
	 * @return ImageView
	 */
	public ImageView getImageView();
	
	/**
	 * main ImageView의 현재 RectF값을 가져온다.
	 * @return RectF
	 */
	public RectF getImageViewRect();
	
	/**
	 * DesignView 전용  편집한 이미지의 위치정보를 가져온다.
	 * @return int[]
	 */
	public int[] getImagePosition();
	
	/**
	 * DesignView 전용 서버에 저장된 이미지의 위치정보를 반영한다.
	 * @param position
	 */
	public void setImagePosition(int[] position);
	
	/**
	 * 현재 zoom상태인지 확인한다.
	 * @return boolean
	 */
	public boolean isZoomMode();
	
	/**
	 * 현재 최대 더블탭 Zoom상태인지 확인한다.
	 * @return boolean
	 */
	public boolean isMaxDoubleTapZoom();
	
	/**
	 * zoom 모드를 set해준다.
	 * @param enable - zoom이라면 true, zoom이 아니라면 false
	 * @param maxZoom MIN_ZOOM:-1, NORMAL:0, MAX_ZOOM:1, DOUBLE_TAP:2 
	 * @param point : DoubleTap한 위치, 만일 enable이 false라면 0,0으로 전달
	 */
	public void setZoomMode(boolean enable, int maxZoom, Point point);
	
	/**
	 * zoom scale값을 가져온다.
	 * @return float
	 */
	public float getZoomScale();
	
	/**
     * Slide상태 값을 받아 볼 Listener를 등록한다.
     * @param listener
     */
	public void setSlideStateListener(SlideStateListener listener);
	
	/**
	 * Body 리소스를 정리할 시에 메모리 cache를 제거하기 위해서 각 body에 저장하고 있는 imagepath를 가져온다.
	 * @return String
	 */
	public String getImagePath();
	
	/**
	 * 각 body에 현재 보여주고 있는 이미지의  imagepath를 set해준다.
	 * @param path
	 */
	public void setImagePath(String path);
	
	/**
	 * 각 BodyView에 TouchEvent를 전달해준다.
	 * 가로 스크롤, 세로 스크롤, DoubleTap, ZoomInOut 등등의 동작이 복합적으로 들어가므로 Touch를 분리해준다.
	 * @param ev
	 * @return boolean
	 */
	public boolean sendTouchEvent(MotionEvent ev);
	
	/**
	 * 각 Body가 화면밖으로 사라질 시에 정리하기 위해서 호출한다.
	 */
	public void destroyItem();

}
